package tpi.obj3.planificador.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import tpi.obj3.planificador.services.PlanificadorGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalPlanificadorParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_INT", "RULE_ID", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'planificacion'", "'semestre'", "'{'", "'a dictar:'", "'horarios'", "'lunes:'", "';'", "'martes:'", "'miercoles:'", "'jueves:'", "'viernes:'", "'sabado:'", "'}'", "'materia'", "'hs/sem:'", "'ds/sem:'", "'requiere:'", "'docente con dedicacion'", "'recurso'", "'aula'", "'desde'", "'hasta'", "'en'", "'simple'", "'semi'", "'exclusiva'", "'dicta'"
    };
    public static final int RULE_ID=5;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__30=30;
    public static final int T__19=19;
    public static final int T__31=31;
    public static final int RULE_STRING=6;
    public static final int T__32=32;
    public static final int T__33=33;
    public static final int T__16=16;
    public static final int T__34=34;
    public static final int T__15=15;
    public static final int T__35=35;
    public static final int T__18=18;
    public static final int T__36=36;
    public static final int T__17=17;
    public static final int T__37=37;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=4;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalPlanificadorParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalPlanificadorParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalPlanificadorParser.tokenNames; }
    public String getGrammarFileName() { return "../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g"; }



     	private PlanificadorGrammarAccess grammarAccess;
     	
        public InternalPlanificadorParser(TokenStream input, PlanificadorGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Modelo";	
       	}
       	
       	@Override
       	protected PlanificadorGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleModelo"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:67:1: entryRuleModelo returns [EObject current=null] : iv_ruleModelo= ruleModelo EOF ;
    public final EObject entryRuleModelo() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModelo = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:68:2: (iv_ruleModelo= ruleModelo EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:69:2: iv_ruleModelo= ruleModelo EOF
            {
             newCompositeNode(grammarAccess.getModeloRule()); 
            pushFollow(FOLLOW_ruleModelo_in_entryRuleModelo75);
            iv_ruleModelo=ruleModelo();

            state._fsp--;

             current =iv_ruleModelo; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleModelo85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModelo"


    // $ANTLR start "ruleModelo"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:76:1: ruleModelo returns [EObject current=null] : ( (lv_elementos_0_0= ruleElemento ) )* ;
    public final EObject ruleModelo() throws RecognitionException {
        EObject current = null;

        EObject lv_elementos_0_0 = null;


         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:79:28: ( ( (lv_elementos_0_0= ruleElemento ) )* )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:80:1: ( (lv_elementos_0_0= ruleElemento ) )*
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:80:1: ( (lv_elementos_0_0= ruleElemento ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==RULE_ID||LA1_0==11||LA1_0==24||(LA1_0>=28 && LA1_0<=31)) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:81:1: (lv_elementos_0_0= ruleElemento )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:81:1: (lv_elementos_0_0= ruleElemento )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:82:3: lv_elementos_0_0= ruleElemento
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getModeloAccess().getElementosElementoParserRuleCall_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleElemento_in_ruleModelo130);
            	    lv_elementos_0_0=ruleElemento();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getModeloRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"elementos",
            	            		lv_elementos_0_0, 
            	            		"Elemento");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModelo"


    // $ANTLR start "entryRuleElemento"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:106:1: entryRuleElemento returns [EObject current=null] : iv_ruleElemento= ruleElemento EOF ;
    public final EObject entryRuleElemento() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleElemento = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:107:2: (iv_ruleElemento= ruleElemento EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:108:2: iv_ruleElemento= ruleElemento EOF
            {
             newCompositeNode(grammarAccess.getElementoRule()); 
            pushFollow(FOLLOW_ruleElemento_in_entryRuleElemento166);
            iv_ruleElemento=ruleElemento();

            state._fsp--;

             current =iv_ruleElemento; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleElemento176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleElemento"


    // $ANTLR start "ruleElemento"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:115:1: ruleElemento returns [EObject current=null] : (this_Planificacion_0= rulePlanificacion | this_Materia_1= ruleMateria | this_Recurso_2= ruleRecurso | this_Docente_3= ruleDocente | this_Clase_4= ruleClase | this_Aula_5= ruleAula | this_Asignacion_6= ruleAsignacion ) ;
    public final EObject ruleElemento() throws RecognitionException {
        EObject current = null;

        EObject this_Planificacion_0 = null;

        EObject this_Materia_1 = null;

        EObject this_Recurso_2 = null;

        EObject this_Docente_3 = null;

        EObject this_Clase_4 = null;

        EObject this_Aula_5 = null;

        EObject this_Asignacion_6 = null;


         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:118:28: ( (this_Planificacion_0= rulePlanificacion | this_Materia_1= ruleMateria | this_Recurso_2= ruleRecurso | this_Docente_3= ruleDocente | this_Clase_4= ruleClase | this_Aula_5= ruleAula | this_Asignacion_6= ruleAsignacion ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:119:1: (this_Planificacion_0= rulePlanificacion | this_Materia_1= ruleMateria | this_Recurso_2= ruleRecurso | this_Docente_3= ruleDocente | this_Clase_4= ruleClase | this_Aula_5= ruleAula | this_Asignacion_6= ruleAsignacion )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:119:1: (this_Planificacion_0= rulePlanificacion | this_Materia_1= ruleMateria | this_Recurso_2= ruleRecurso | this_Docente_3= ruleDocente | this_Clase_4= ruleClase | this_Aula_5= ruleAula | this_Asignacion_6= ruleAsignacion )
            int alt2=7;
            switch ( input.LA(1) ) {
            case 11:
                {
                alt2=1;
                }
                break;
            case 24:
                {
                alt2=2;
                }
                break;
            case 29:
                {
                alt2=3;
                }
                break;
            case 28:
                {
                alt2=4;
                }
                break;
            case 31:
                {
                alt2=5;
                }
                break;
            case 30:
                {
                alt2=6;
                }
                break;
            case RULE_ID:
                {
                alt2=7;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;
            }

            switch (alt2) {
                case 1 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:120:5: this_Planificacion_0= rulePlanificacion
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getPlanificacionParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_rulePlanificacion_in_ruleElemento223);
                    this_Planificacion_0=rulePlanificacion();

                    state._fsp--;

                     
                            current = this_Planificacion_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:130:5: this_Materia_1= ruleMateria
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getMateriaParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleMateria_in_ruleElemento250);
                    this_Materia_1=ruleMateria();

                    state._fsp--;

                     
                            current = this_Materia_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:140:5: this_Recurso_2= ruleRecurso
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getRecursoParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleRecurso_in_ruleElemento277);
                    this_Recurso_2=ruleRecurso();

                    state._fsp--;

                     
                            current = this_Recurso_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 4 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:150:5: this_Docente_3= ruleDocente
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getDocenteParserRuleCall_3()); 
                        
                    pushFollow(FOLLOW_ruleDocente_in_ruleElemento304);
                    this_Docente_3=ruleDocente();

                    state._fsp--;

                     
                            current = this_Docente_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 5 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:160:5: this_Clase_4= ruleClase
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getClaseParserRuleCall_4()); 
                        
                    pushFollow(FOLLOW_ruleClase_in_ruleElemento331);
                    this_Clase_4=ruleClase();

                    state._fsp--;

                     
                            current = this_Clase_4; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 6 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:170:5: this_Aula_5= ruleAula
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getAulaParserRuleCall_5()); 
                        
                    pushFollow(FOLLOW_ruleAula_in_ruleElemento358);
                    this_Aula_5=ruleAula();

                    state._fsp--;

                     
                            current = this_Aula_5; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 7 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:180:5: this_Asignacion_6= ruleAsignacion
                    {
                     
                            newCompositeNode(grammarAccess.getElementoAccess().getAsignacionParserRuleCall_6()); 
                        
                    pushFollow(FOLLOW_ruleAsignacion_in_ruleElemento385);
                    this_Asignacion_6=ruleAsignacion();

                    state._fsp--;

                     
                            current = this_Asignacion_6; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleElemento"


    // $ANTLR start "entryRulePlanificacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:196:1: entryRulePlanificacion returns [EObject current=null] : iv_rulePlanificacion= rulePlanificacion EOF ;
    public final EObject entryRulePlanificacion() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePlanificacion = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:197:2: (iv_rulePlanificacion= rulePlanificacion EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:198:2: iv_rulePlanificacion= rulePlanificacion EOF
            {
             newCompositeNode(grammarAccess.getPlanificacionRule()); 
            pushFollow(FOLLOW_rulePlanificacion_in_entryRulePlanificacion420);
            iv_rulePlanificacion=rulePlanificacion();

            state._fsp--;

             current =iv_rulePlanificacion; 
            match(input,EOF,FOLLOW_EOF_in_entryRulePlanificacion430); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePlanificacion"


    // $ANTLR start "rulePlanificacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:205:1: rulePlanificacion returns [EObject current=null] : (otherlv_0= 'planificacion' ( (lv_anio_1_0= RULE_INT ) ) otherlv_2= 'semestre' ( (lv_semestre_3_0= RULE_INT ) ) otherlv_4= '{' otherlv_5= 'a dictar:' ( (otherlv_6= RULE_ID ) )* otherlv_7= 'horarios' otherlv_8= '{' otherlv_9= 'lunes:' ( (lv_clasesLunes_10_0= ruleClase ) )* otherlv_11= ';' otherlv_12= 'martes:' ( (lv_clasesMartes_13_0= ruleClase ) )* otherlv_14= ';' otherlv_15= 'miercoles:' ( (lv_clasesMiercoles_16_0= ruleClase ) )* otherlv_17= ';' otherlv_18= 'jueves:' ( (lv_clasesJueves_19_0= ruleClase ) )* otherlv_20= ';' otherlv_21= 'viernes:' ( (lv_clasesViernes_22_0= ruleClase ) )* otherlv_23= ';' otherlv_24= 'sabado:' ( (lv_clasesSabado_25_0= ruleClase ) )* otherlv_26= ';' otherlv_27= '}' otherlv_28= '}' ) ;
    public final EObject rulePlanificacion() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_anio_1_0=null;
        Token otherlv_2=null;
        Token lv_semestre_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_12=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_26=null;
        Token otherlv_27=null;
        Token otherlv_28=null;
        EObject lv_clasesLunes_10_0 = null;

        EObject lv_clasesMartes_13_0 = null;

        EObject lv_clasesMiercoles_16_0 = null;

        EObject lv_clasesJueves_19_0 = null;

        EObject lv_clasesViernes_22_0 = null;

        EObject lv_clasesSabado_25_0 = null;


         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:208:28: ( (otherlv_0= 'planificacion' ( (lv_anio_1_0= RULE_INT ) ) otherlv_2= 'semestre' ( (lv_semestre_3_0= RULE_INT ) ) otherlv_4= '{' otherlv_5= 'a dictar:' ( (otherlv_6= RULE_ID ) )* otherlv_7= 'horarios' otherlv_8= '{' otherlv_9= 'lunes:' ( (lv_clasesLunes_10_0= ruleClase ) )* otherlv_11= ';' otherlv_12= 'martes:' ( (lv_clasesMartes_13_0= ruleClase ) )* otherlv_14= ';' otherlv_15= 'miercoles:' ( (lv_clasesMiercoles_16_0= ruleClase ) )* otherlv_17= ';' otherlv_18= 'jueves:' ( (lv_clasesJueves_19_0= ruleClase ) )* otherlv_20= ';' otherlv_21= 'viernes:' ( (lv_clasesViernes_22_0= ruleClase ) )* otherlv_23= ';' otherlv_24= 'sabado:' ( (lv_clasesSabado_25_0= ruleClase ) )* otherlv_26= ';' otherlv_27= '}' otherlv_28= '}' ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:209:1: (otherlv_0= 'planificacion' ( (lv_anio_1_0= RULE_INT ) ) otherlv_2= 'semestre' ( (lv_semestre_3_0= RULE_INT ) ) otherlv_4= '{' otherlv_5= 'a dictar:' ( (otherlv_6= RULE_ID ) )* otherlv_7= 'horarios' otherlv_8= '{' otherlv_9= 'lunes:' ( (lv_clasesLunes_10_0= ruleClase ) )* otherlv_11= ';' otherlv_12= 'martes:' ( (lv_clasesMartes_13_0= ruleClase ) )* otherlv_14= ';' otherlv_15= 'miercoles:' ( (lv_clasesMiercoles_16_0= ruleClase ) )* otherlv_17= ';' otherlv_18= 'jueves:' ( (lv_clasesJueves_19_0= ruleClase ) )* otherlv_20= ';' otherlv_21= 'viernes:' ( (lv_clasesViernes_22_0= ruleClase ) )* otherlv_23= ';' otherlv_24= 'sabado:' ( (lv_clasesSabado_25_0= ruleClase ) )* otherlv_26= ';' otherlv_27= '}' otherlv_28= '}' )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:209:1: (otherlv_0= 'planificacion' ( (lv_anio_1_0= RULE_INT ) ) otherlv_2= 'semestre' ( (lv_semestre_3_0= RULE_INT ) ) otherlv_4= '{' otherlv_5= 'a dictar:' ( (otherlv_6= RULE_ID ) )* otherlv_7= 'horarios' otherlv_8= '{' otherlv_9= 'lunes:' ( (lv_clasesLunes_10_0= ruleClase ) )* otherlv_11= ';' otherlv_12= 'martes:' ( (lv_clasesMartes_13_0= ruleClase ) )* otherlv_14= ';' otherlv_15= 'miercoles:' ( (lv_clasesMiercoles_16_0= ruleClase ) )* otherlv_17= ';' otherlv_18= 'jueves:' ( (lv_clasesJueves_19_0= ruleClase ) )* otherlv_20= ';' otherlv_21= 'viernes:' ( (lv_clasesViernes_22_0= ruleClase ) )* otherlv_23= ';' otherlv_24= 'sabado:' ( (lv_clasesSabado_25_0= ruleClase ) )* otherlv_26= ';' otherlv_27= '}' otherlv_28= '}' )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:209:3: otherlv_0= 'planificacion' ( (lv_anio_1_0= RULE_INT ) ) otherlv_2= 'semestre' ( (lv_semestre_3_0= RULE_INT ) ) otherlv_4= '{' otherlv_5= 'a dictar:' ( (otherlv_6= RULE_ID ) )* otherlv_7= 'horarios' otherlv_8= '{' otherlv_9= 'lunes:' ( (lv_clasesLunes_10_0= ruleClase ) )* otherlv_11= ';' otherlv_12= 'martes:' ( (lv_clasesMartes_13_0= ruleClase ) )* otherlv_14= ';' otherlv_15= 'miercoles:' ( (lv_clasesMiercoles_16_0= ruleClase ) )* otherlv_17= ';' otherlv_18= 'jueves:' ( (lv_clasesJueves_19_0= ruleClase ) )* otherlv_20= ';' otherlv_21= 'viernes:' ( (lv_clasesViernes_22_0= ruleClase ) )* otherlv_23= ';' otherlv_24= 'sabado:' ( (lv_clasesSabado_25_0= ruleClase ) )* otherlv_26= ';' otherlv_27= '}' otherlv_28= '}'
            {
            otherlv_0=(Token)match(input,11,FOLLOW_11_in_rulePlanificacion467); 

                	newLeafNode(otherlv_0, grammarAccess.getPlanificacionAccess().getPlanificacionKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:213:1: ( (lv_anio_1_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:214:1: (lv_anio_1_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:214:1: (lv_anio_1_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:215:3: lv_anio_1_0= RULE_INT
            {
            lv_anio_1_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_rulePlanificacion484); 

            			newLeafNode(lv_anio_1_0, grammarAccess.getPlanificacionAccess().getAnioINTTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPlanificacionRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"anio",
                    		lv_anio_1_0, 
                    		"INT");
            	    

            }


            }

            otherlv_2=(Token)match(input,12,FOLLOW_12_in_rulePlanificacion501); 

                	newLeafNode(otherlv_2, grammarAccess.getPlanificacionAccess().getSemestreKeyword_2());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:235:1: ( (lv_semestre_3_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:236:1: (lv_semestre_3_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:236:1: (lv_semestre_3_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:237:3: lv_semestre_3_0= RULE_INT
            {
            lv_semestre_3_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_rulePlanificacion518); 

            			newLeafNode(lv_semestre_3_0, grammarAccess.getPlanificacionAccess().getSemestreINTTerminalRuleCall_3_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPlanificacionRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"semestre",
                    		lv_semestre_3_0, 
                    		"INT");
            	    

            }


            }

            otherlv_4=(Token)match(input,13,FOLLOW_13_in_rulePlanificacion535); 

                	newLeafNode(otherlv_4, grammarAccess.getPlanificacionAccess().getLeftCurlyBracketKeyword_4());
                
            otherlv_5=(Token)match(input,14,FOLLOW_14_in_rulePlanificacion547); 

                	newLeafNode(otherlv_5, grammarAccess.getPlanificacionAccess().getADictarKeyword_5());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:261:1: ( (otherlv_6= RULE_ID ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==RULE_ID) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:262:1: (otherlv_6= RULE_ID )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:262:1: (otherlv_6= RULE_ID )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:263:3: otherlv_6= RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getPlanificacionRule());
            	    	        }
            	            
            	    otherlv_6=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePlanificacion567); 

            	    		newLeafNode(otherlv_6, grammarAccess.getPlanificacionAccess().getMateriasMateriaCrossReference_6_0()); 
            	    	

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            otherlv_7=(Token)match(input,15,FOLLOW_15_in_rulePlanificacion580); 

                	newLeafNode(otherlv_7, grammarAccess.getPlanificacionAccess().getHorariosKeyword_7());
                
            otherlv_8=(Token)match(input,13,FOLLOW_13_in_rulePlanificacion592); 

                	newLeafNode(otherlv_8, grammarAccess.getPlanificacionAccess().getLeftCurlyBracketKeyword_8());
                
            otherlv_9=(Token)match(input,16,FOLLOW_16_in_rulePlanificacion604); 

                	newLeafNode(otherlv_9, grammarAccess.getPlanificacionAccess().getLunesKeyword_9());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:286:1: ( (lv_clasesLunes_10_0= ruleClase ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==31) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:287:1: (lv_clasesLunes_10_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:287:1: (lv_clasesLunes_10_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:288:3: lv_clasesLunes_10_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesLunesClaseParserRuleCall_10_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion625);
            	    lv_clasesLunes_10_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesLunes",
            	            		lv_clasesLunes_10_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);

            otherlv_11=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion638); 

                	newLeafNode(otherlv_11, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_11());
                
            otherlv_12=(Token)match(input,18,FOLLOW_18_in_rulePlanificacion650); 

                	newLeafNode(otherlv_12, grammarAccess.getPlanificacionAccess().getMartesKeyword_12());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:312:1: ( (lv_clasesMartes_13_0= ruleClase ) )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==31) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:313:1: (lv_clasesMartes_13_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:313:1: (lv_clasesMartes_13_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:314:3: lv_clasesMartes_13_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesMartesClaseParserRuleCall_13_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion671);
            	    lv_clasesMartes_13_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesMartes",
            	            		lv_clasesMartes_13_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);

            otherlv_14=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion684); 

                	newLeafNode(otherlv_14, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_14());
                
            otherlv_15=(Token)match(input,19,FOLLOW_19_in_rulePlanificacion696); 

                	newLeafNode(otherlv_15, grammarAccess.getPlanificacionAccess().getMiercolesKeyword_15());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:338:1: ( (lv_clasesMiercoles_16_0= ruleClase ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==31) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:339:1: (lv_clasesMiercoles_16_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:339:1: (lv_clasesMiercoles_16_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:340:3: lv_clasesMiercoles_16_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesMiercolesClaseParserRuleCall_16_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion717);
            	    lv_clasesMiercoles_16_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesMiercoles",
            	            		lv_clasesMiercoles_16_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            otherlv_17=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion730); 

                	newLeafNode(otherlv_17, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_17());
                
            otherlv_18=(Token)match(input,20,FOLLOW_20_in_rulePlanificacion742); 

                	newLeafNode(otherlv_18, grammarAccess.getPlanificacionAccess().getJuevesKeyword_18());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:364:1: ( (lv_clasesJueves_19_0= ruleClase ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==31) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:365:1: (lv_clasesJueves_19_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:365:1: (lv_clasesJueves_19_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:366:3: lv_clasesJueves_19_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesJuevesClaseParserRuleCall_19_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion763);
            	    lv_clasesJueves_19_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesJueves",
            	            		lv_clasesJueves_19_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);

            otherlv_20=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion776); 

                	newLeafNode(otherlv_20, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_20());
                
            otherlv_21=(Token)match(input,21,FOLLOW_21_in_rulePlanificacion788); 

                	newLeafNode(otherlv_21, grammarAccess.getPlanificacionAccess().getViernesKeyword_21());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:390:1: ( (lv_clasesViernes_22_0= ruleClase ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==31) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:391:1: (lv_clasesViernes_22_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:391:1: (lv_clasesViernes_22_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:392:3: lv_clasesViernes_22_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesViernesClaseParserRuleCall_22_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion809);
            	    lv_clasesViernes_22_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesViernes",
            	            		lv_clasesViernes_22_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);

            otherlv_23=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion822); 

                	newLeafNode(otherlv_23, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_23());
                
            otherlv_24=(Token)match(input,22,FOLLOW_22_in_rulePlanificacion834); 

                	newLeafNode(otherlv_24, grammarAccess.getPlanificacionAccess().getSabadoKeyword_24());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:416:1: ( (lv_clasesSabado_25_0= ruleClase ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==31) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:417:1: (lv_clasesSabado_25_0= ruleClase )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:417:1: (lv_clasesSabado_25_0= ruleClase )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:418:3: lv_clasesSabado_25_0= ruleClase
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getPlanificacionAccess().getClasesSabadoClaseParserRuleCall_25_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleClase_in_rulePlanificacion855);
            	    lv_clasesSabado_25_0=ruleClase();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getPlanificacionRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"clasesSabado",
            	            		lv_clasesSabado_25_0, 
            	            		"Clase");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);

            otherlv_26=(Token)match(input,17,FOLLOW_17_in_rulePlanificacion868); 

                	newLeafNode(otherlv_26, grammarAccess.getPlanificacionAccess().getSemicolonKeyword_26());
                
            otherlv_27=(Token)match(input,23,FOLLOW_23_in_rulePlanificacion880); 

                	newLeafNode(otherlv_27, grammarAccess.getPlanificacionAccess().getRightCurlyBracketKeyword_27());
                
            otherlv_28=(Token)match(input,23,FOLLOW_23_in_rulePlanificacion892); 

                	newLeafNode(otherlv_28, grammarAccess.getPlanificacionAccess().getRightCurlyBracketKeyword_28());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePlanificacion"


    // $ANTLR start "entryRuleMateria"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:454:1: entryRuleMateria returns [EObject current=null] : iv_ruleMateria= ruleMateria EOF ;
    public final EObject entryRuleMateria() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMateria = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:455:2: (iv_ruleMateria= ruleMateria EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:456:2: iv_ruleMateria= ruleMateria EOF
            {
             newCompositeNode(grammarAccess.getMateriaRule()); 
            pushFollow(FOLLOW_ruleMateria_in_entryRuleMateria928);
            iv_ruleMateria=ruleMateria();

            state._fsp--;

             current =iv_ruleMateria; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMateria938); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMateria"


    // $ANTLR start "ruleMateria"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:463:1: ruleMateria returns [EObject current=null] : (otherlv_0= 'materia' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'hs/sem:' ( (lv_horas_4_0= RULE_INT ) ) otherlv_5= 'ds/sem:' ( (lv_dias_6_0= RULE_INT ) ) (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )* otherlv_9= '}' ) ;
    public final EObject ruleMateria() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_horas_4_0=null;
        Token otherlv_5=null;
        Token lv_dias_6_0=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:466:28: ( (otherlv_0= 'materia' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'hs/sem:' ( (lv_horas_4_0= RULE_INT ) ) otherlv_5= 'ds/sem:' ( (lv_dias_6_0= RULE_INT ) ) (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )* otherlv_9= '}' ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:467:1: (otherlv_0= 'materia' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'hs/sem:' ( (lv_horas_4_0= RULE_INT ) ) otherlv_5= 'ds/sem:' ( (lv_dias_6_0= RULE_INT ) ) (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )* otherlv_9= '}' )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:467:1: (otherlv_0= 'materia' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'hs/sem:' ( (lv_horas_4_0= RULE_INT ) ) otherlv_5= 'ds/sem:' ( (lv_dias_6_0= RULE_INT ) ) (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )* otherlv_9= '}' )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:467:3: otherlv_0= 'materia' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' otherlv_3= 'hs/sem:' ( (lv_horas_4_0= RULE_INT ) ) otherlv_5= 'ds/sem:' ( (lv_dias_6_0= RULE_INT ) ) (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )* otherlv_9= '}'
            {
            otherlv_0=(Token)match(input,24,FOLLOW_24_in_ruleMateria975); 

                	newLeafNode(otherlv_0, grammarAccess.getMateriaAccess().getMateriaKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:471:1: ( (lv_name_1_0= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:472:1: (lv_name_1_0= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:472:1: (lv_name_1_0= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:473:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMateria992); 

            			newLeafNode(lv_name_1_0, grammarAccess.getMateriaAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMateriaRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            otherlv_2=(Token)match(input,13,FOLLOW_13_in_ruleMateria1009); 

                	newLeafNode(otherlv_2, grammarAccess.getMateriaAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,25,FOLLOW_25_in_ruleMateria1021); 

                	newLeafNode(otherlv_3, grammarAccess.getMateriaAccess().getHsSemKeyword_3());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:497:1: ( (lv_horas_4_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:498:1: (lv_horas_4_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:498:1: (lv_horas_4_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:499:3: lv_horas_4_0= RULE_INT
            {
            lv_horas_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleMateria1038); 

            			newLeafNode(lv_horas_4_0, grammarAccess.getMateriaAccess().getHorasINTTerminalRuleCall_4_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMateriaRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"horas",
                    		lv_horas_4_0, 
                    		"INT");
            	    

            }


            }

            otherlv_5=(Token)match(input,26,FOLLOW_26_in_ruleMateria1055); 

                	newLeafNode(otherlv_5, grammarAccess.getMateriaAccess().getDsSemKeyword_5());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:519:1: ( (lv_dias_6_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:520:1: (lv_dias_6_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:520:1: (lv_dias_6_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:521:3: lv_dias_6_0= RULE_INT
            {
            lv_dias_6_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleMateria1072); 

            			newLeafNode(lv_dias_6_0, grammarAccess.getMateriaAccess().getDiasINTTerminalRuleCall_6_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMateriaRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"dias",
                    		lv_dias_6_0, 
                    		"INT");
            	    

            }


            }

            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:537:2: (otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) ) )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==27) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:537:4: otherlv_7= 'requiere:' ( (otherlv_8= RULE_ID ) )
            	    {
            	    otherlv_7=(Token)match(input,27,FOLLOW_27_in_ruleMateria1090); 

            	        	newLeafNode(otherlv_7, grammarAccess.getMateriaAccess().getRequiereKeyword_7_0());
            	        
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:541:1: ( (otherlv_8= RULE_ID ) )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:542:1: (otherlv_8= RULE_ID )
            	    {
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:542:1: (otherlv_8= RULE_ID )
            	    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:543:3: otherlv_8= RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getMateriaRule());
            	    	        }
            	            
            	    otherlv_8=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMateria1110); 

            	    		newLeafNode(otherlv_8, grammarAccess.getMateriaAccess().getRequerimientosRecursoCrossReference_7_1_0()); 
            	    	

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);

            otherlv_9=(Token)match(input,23,FOLLOW_23_in_ruleMateria1124); 

                	newLeafNode(otherlv_9, grammarAccess.getMateriaAccess().getRightCurlyBracketKeyword_8());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMateria"


    // $ANTLR start "entryRuleDocente"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:566:1: entryRuleDocente returns [EObject current=null] : iv_ruleDocente= ruleDocente EOF ;
    public final EObject entryRuleDocente() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDocente = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:567:2: (iv_ruleDocente= ruleDocente EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:568:2: iv_ruleDocente= ruleDocente EOF
            {
             newCompositeNode(grammarAccess.getDocenteRule()); 
            pushFollow(FOLLOW_ruleDocente_in_entryRuleDocente1160);
            iv_ruleDocente=ruleDocente();

            state._fsp--;

             current =iv_ruleDocente; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDocente1170); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDocente"


    // $ANTLR start "ruleDocente"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:575:1: ruleDocente returns [EObject current=null] : (otherlv_0= 'docente con dedicacion' ( (lv_dedicacion_1_0= ruleDedicacion ) ) ( (lv_name_2_0= RULE_ID ) ) ) ;
    public final EObject ruleDocente() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_2_0=null;
        AntlrDatatypeRuleToken lv_dedicacion_1_0 = null;


         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:578:28: ( (otherlv_0= 'docente con dedicacion' ( (lv_dedicacion_1_0= ruleDedicacion ) ) ( (lv_name_2_0= RULE_ID ) ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:579:1: (otherlv_0= 'docente con dedicacion' ( (lv_dedicacion_1_0= ruleDedicacion ) ) ( (lv_name_2_0= RULE_ID ) ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:579:1: (otherlv_0= 'docente con dedicacion' ( (lv_dedicacion_1_0= ruleDedicacion ) ) ( (lv_name_2_0= RULE_ID ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:579:3: otherlv_0= 'docente con dedicacion' ( (lv_dedicacion_1_0= ruleDedicacion ) ) ( (lv_name_2_0= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,28,FOLLOW_28_in_ruleDocente1207); 

                	newLeafNode(otherlv_0, grammarAccess.getDocenteAccess().getDocenteConDedicacionKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:583:1: ( (lv_dedicacion_1_0= ruleDedicacion ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:584:1: (lv_dedicacion_1_0= ruleDedicacion )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:584:1: (lv_dedicacion_1_0= ruleDedicacion )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:585:3: lv_dedicacion_1_0= ruleDedicacion
            {
             
            	        newCompositeNode(grammarAccess.getDocenteAccess().getDedicacionDedicacionParserRuleCall_1_0()); 
            	    
            pushFollow(FOLLOW_ruleDedicacion_in_ruleDocente1228);
            lv_dedicacion_1_0=ruleDedicacion();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getDocenteRule());
            	        }
                   		set(
                   			current, 
                   			"dedicacion",
                    		lv_dedicacion_1_0, 
                    		"Dedicacion");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:601:2: ( (lv_name_2_0= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:602:1: (lv_name_2_0= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:602:1: (lv_name_2_0= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:603:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDocente1245); 

            			newLeafNode(lv_name_2_0, grammarAccess.getDocenteAccess().getNameIDTerminalRuleCall_2_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getDocenteRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_2_0, 
                    		"ID");
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDocente"


    // $ANTLR start "entryRuleRecurso"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:627:1: entryRuleRecurso returns [EObject current=null] : iv_ruleRecurso= ruleRecurso EOF ;
    public final EObject entryRuleRecurso() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRecurso = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:628:2: (iv_ruleRecurso= ruleRecurso EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:629:2: iv_ruleRecurso= ruleRecurso EOF
            {
             newCompositeNode(grammarAccess.getRecursoRule()); 
            pushFollow(FOLLOW_ruleRecurso_in_entryRuleRecurso1286);
            iv_ruleRecurso=ruleRecurso();

            state._fsp--;

             current =iv_ruleRecurso; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRecurso1296); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRecurso"


    // $ANTLR start "ruleRecurso"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:636:1: ruleRecurso returns [EObject current=null] : (otherlv_0= 'recurso' ( (lv_name_1_0= RULE_ID ) ) ) ;
    public final EObject ruleRecurso() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:639:28: ( (otherlv_0= 'recurso' ( (lv_name_1_0= RULE_ID ) ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:640:1: (otherlv_0= 'recurso' ( (lv_name_1_0= RULE_ID ) ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:640:1: (otherlv_0= 'recurso' ( (lv_name_1_0= RULE_ID ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:640:3: otherlv_0= 'recurso' ( (lv_name_1_0= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,29,FOLLOW_29_in_ruleRecurso1333); 

                	newLeafNode(otherlv_0, grammarAccess.getRecursoAccess().getRecursoKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:644:1: ( (lv_name_1_0= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:645:1: (lv_name_1_0= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:645:1: (lv_name_1_0= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:646:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRecurso1350); 

            			newLeafNode(lv_name_1_0, grammarAccess.getRecursoAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getRecursoRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRecurso"


    // $ANTLR start "entryRuleAula"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:670:1: entryRuleAula returns [EObject current=null] : iv_ruleAula= ruleAula EOF ;
    public final EObject entryRuleAula() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAula = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:671:2: (iv_ruleAula= ruleAula EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:672:2: iv_ruleAula= ruleAula EOF
            {
             newCompositeNode(grammarAccess.getAulaRule()); 
            pushFollow(FOLLOW_ruleAula_in_entryRuleAula1391);
            iv_ruleAula=ruleAula();

            state._fsp--;

             current =iv_ruleAula; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAula1401); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAula"


    // $ANTLR start "ruleAula"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:679:1: ruleAula returns [EObject current=null] : (otherlv_0= 'aula' ( (lv_name_1_0= RULE_ID ) ) ) ;
    public final EObject ruleAula() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:682:28: ( (otherlv_0= 'aula' ( (lv_name_1_0= RULE_ID ) ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:683:1: (otherlv_0= 'aula' ( (lv_name_1_0= RULE_ID ) ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:683:1: (otherlv_0= 'aula' ( (lv_name_1_0= RULE_ID ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:683:3: otherlv_0= 'aula' ( (lv_name_1_0= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,30,FOLLOW_30_in_ruleAula1438); 

                	newLeafNode(otherlv_0, grammarAccess.getAulaAccess().getAulaKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:687:1: ( (lv_name_1_0= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:688:1: (lv_name_1_0= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:688:1: (lv_name_1_0= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:689:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAula1455); 

            			newLeafNode(lv_name_1_0, grammarAccess.getAulaAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getAulaRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAula"


    // $ANTLR start "entryRuleClase"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:713:1: entryRuleClase returns [EObject current=null] : iv_ruleClase= ruleClase EOF ;
    public final EObject entryRuleClase() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleClase = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:714:2: (iv_ruleClase= ruleClase EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:715:2: iv_ruleClase= ruleClase EOF
            {
             newCompositeNode(grammarAccess.getClaseRule()); 
            pushFollow(FOLLOW_ruleClase_in_entryRuleClase1496);
            iv_ruleClase=ruleClase();

            state._fsp--;

             current =iv_ruleClase; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleClase1506); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleClase"


    // $ANTLR start "ruleClase"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:722:1: ruleClase returns [EObject current=null] : (otherlv_0= 'desde' ( (lv_inicio_1_0= RULE_INT ) ) otherlv_2= 'hasta' ( (lv_fin_3_0= RULE_INT ) ) ( (otherlv_4= RULE_ID ) ) otherlv_5= 'en' ( (otherlv_6= RULE_ID ) ) ) ;
    public final EObject ruleClase() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_inicio_1_0=null;
        Token otherlv_2=null;
        Token lv_fin_3_0=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:725:28: ( (otherlv_0= 'desde' ( (lv_inicio_1_0= RULE_INT ) ) otherlv_2= 'hasta' ( (lv_fin_3_0= RULE_INT ) ) ( (otherlv_4= RULE_ID ) ) otherlv_5= 'en' ( (otherlv_6= RULE_ID ) ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:726:1: (otherlv_0= 'desde' ( (lv_inicio_1_0= RULE_INT ) ) otherlv_2= 'hasta' ( (lv_fin_3_0= RULE_INT ) ) ( (otherlv_4= RULE_ID ) ) otherlv_5= 'en' ( (otherlv_6= RULE_ID ) ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:726:1: (otherlv_0= 'desde' ( (lv_inicio_1_0= RULE_INT ) ) otherlv_2= 'hasta' ( (lv_fin_3_0= RULE_INT ) ) ( (otherlv_4= RULE_ID ) ) otherlv_5= 'en' ( (otherlv_6= RULE_ID ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:726:3: otherlv_0= 'desde' ( (lv_inicio_1_0= RULE_INT ) ) otherlv_2= 'hasta' ( (lv_fin_3_0= RULE_INT ) ) ( (otherlv_4= RULE_ID ) ) otherlv_5= 'en' ( (otherlv_6= RULE_ID ) )
            {
            otherlv_0=(Token)match(input,31,FOLLOW_31_in_ruleClase1543); 

                	newLeafNode(otherlv_0, grammarAccess.getClaseAccess().getDesdeKeyword_0());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:730:1: ( (lv_inicio_1_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:731:1: (lv_inicio_1_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:731:1: (lv_inicio_1_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:732:3: lv_inicio_1_0= RULE_INT
            {
            lv_inicio_1_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleClase1560); 

            			newLeafNode(lv_inicio_1_0, grammarAccess.getClaseAccess().getInicioINTTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getClaseRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"inicio",
                    		lv_inicio_1_0, 
                    		"INT");
            	    

            }


            }

            otherlv_2=(Token)match(input,32,FOLLOW_32_in_ruleClase1577); 

                	newLeafNode(otherlv_2, grammarAccess.getClaseAccess().getHastaKeyword_2());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:752:1: ( (lv_fin_3_0= RULE_INT ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:753:1: (lv_fin_3_0= RULE_INT )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:753:1: (lv_fin_3_0= RULE_INT )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:754:3: lv_fin_3_0= RULE_INT
            {
            lv_fin_3_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleClase1594); 

            			newLeafNode(lv_fin_3_0, grammarAccess.getClaseAccess().getFinINTTerminalRuleCall_3_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getClaseRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"fin",
                    		lv_fin_3_0, 
                    		"INT");
            	    

            }


            }

            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:770:2: ( (otherlv_4= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:771:1: (otherlv_4= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:771:1: (otherlv_4= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:772:3: otherlv_4= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getClaseRule());
            	        }
                    
            otherlv_4=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleClase1619); 

            		newLeafNode(otherlv_4, grammarAccess.getClaseAccess().getMateriaMateriaCrossReference_4_0()); 
            	

            }


            }

            otherlv_5=(Token)match(input,33,FOLLOW_33_in_ruleClase1631); 

                	newLeafNode(otherlv_5, grammarAccess.getClaseAccess().getEnKeyword_5());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:787:1: ( (otherlv_6= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:788:1: (otherlv_6= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:788:1: (otherlv_6= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:789:3: otherlv_6= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getClaseRule());
            	        }
                    
            otherlv_6=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleClase1651); 

            		newLeafNode(otherlv_6, grammarAccess.getClaseAccess().getAulaAulaCrossReference_6_0()); 
            	

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleClase"


    // $ANTLR start "entryRuleDedicacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:808:1: entryRuleDedicacion returns [String current=null] : iv_ruleDedicacion= ruleDedicacion EOF ;
    public final String entryRuleDedicacion() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleDedicacion = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:809:2: (iv_ruleDedicacion= ruleDedicacion EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:810:2: iv_ruleDedicacion= ruleDedicacion EOF
            {
             newCompositeNode(grammarAccess.getDedicacionRule()); 
            pushFollow(FOLLOW_ruleDedicacion_in_entryRuleDedicacion1688);
            iv_ruleDedicacion=ruleDedicacion();

            state._fsp--;

             current =iv_ruleDedicacion.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDedicacion1699); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDedicacion"


    // $ANTLR start "ruleDedicacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:817:1: ruleDedicacion returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_Simple_0= ruleSimple | this_Semi_1= ruleSemi | this_Exclusiva_2= ruleExclusiva ) ;
    public final AntlrDatatypeRuleToken ruleDedicacion() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        AntlrDatatypeRuleToken this_Simple_0 = null;

        AntlrDatatypeRuleToken this_Semi_1 = null;

        AntlrDatatypeRuleToken this_Exclusiva_2 = null;


         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:820:28: ( (this_Simple_0= ruleSimple | this_Semi_1= ruleSemi | this_Exclusiva_2= ruleExclusiva ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:821:1: (this_Simple_0= ruleSimple | this_Semi_1= ruleSemi | this_Exclusiva_2= ruleExclusiva )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:821:1: (this_Simple_0= ruleSimple | this_Semi_1= ruleSemi | this_Exclusiva_2= ruleExclusiva )
            int alt11=3;
            switch ( input.LA(1) ) {
            case 34:
                {
                alt11=1;
                }
                break;
            case 35:
                {
                alt11=2;
                }
                break;
            case 36:
                {
                alt11=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 11, 0, input);

                throw nvae;
            }

            switch (alt11) {
                case 1 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:822:5: this_Simple_0= ruleSimple
                    {
                     
                            newCompositeNode(grammarAccess.getDedicacionAccess().getSimpleParserRuleCall_0()); 
                        
                    pushFollow(FOLLOW_ruleSimple_in_ruleDedicacion1746);
                    this_Simple_0=ruleSimple();

                    state._fsp--;


                    		current.merge(this_Simple_0);
                        
                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:834:5: this_Semi_1= ruleSemi
                    {
                     
                            newCompositeNode(grammarAccess.getDedicacionAccess().getSemiParserRuleCall_1()); 
                        
                    pushFollow(FOLLOW_ruleSemi_in_ruleDedicacion1779);
                    this_Semi_1=ruleSemi();

                    state._fsp--;


                    		current.merge(this_Semi_1);
                        
                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:846:5: this_Exclusiva_2= ruleExclusiva
                    {
                     
                            newCompositeNode(grammarAccess.getDedicacionAccess().getExclusivaParserRuleCall_2()); 
                        
                    pushFollow(FOLLOW_ruleExclusiva_in_ruleDedicacion1812);
                    this_Exclusiva_2=ruleExclusiva();

                    state._fsp--;


                    		current.merge(this_Exclusiva_2);
                        
                     
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDedicacion"


    // $ANTLR start "entryRuleSimple"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:864:1: entryRuleSimple returns [String current=null] : iv_ruleSimple= ruleSimple EOF ;
    public final String entryRuleSimple() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleSimple = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:865:2: (iv_ruleSimple= ruleSimple EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:866:2: iv_ruleSimple= ruleSimple EOF
            {
             newCompositeNode(grammarAccess.getSimpleRule()); 
            pushFollow(FOLLOW_ruleSimple_in_entryRuleSimple1858);
            iv_ruleSimple=ruleSimple();

            state._fsp--;

             current =iv_ruleSimple.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSimple1869); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSimple"


    // $ANTLR start "ruleSimple"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:873:1: ruleSimple returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'simple' ;
    public final AntlrDatatypeRuleToken ruleSimple() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:876:28: (kw= 'simple' )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:878:2: kw= 'simple'
            {
            kw=(Token)match(input,34,FOLLOW_34_in_ruleSimple1906); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getSimpleAccess().getSimpleKeyword()); 
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSimple"


    // $ANTLR start "entryRuleSemi"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:891:1: entryRuleSemi returns [String current=null] : iv_ruleSemi= ruleSemi EOF ;
    public final String entryRuleSemi() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleSemi = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:892:2: (iv_ruleSemi= ruleSemi EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:893:2: iv_ruleSemi= ruleSemi EOF
            {
             newCompositeNode(grammarAccess.getSemiRule()); 
            pushFollow(FOLLOW_ruleSemi_in_entryRuleSemi1946);
            iv_ruleSemi=ruleSemi();

            state._fsp--;

             current =iv_ruleSemi.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleSemi1957); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSemi"


    // $ANTLR start "ruleSemi"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:900:1: ruleSemi returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'semi' ;
    public final AntlrDatatypeRuleToken ruleSemi() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:903:28: (kw= 'semi' )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:905:2: kw= 'semi'
            {
            kw=(Token)match(input,35,FOLLOW_35_in_ruleSemi1994); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getSemiAccess().getSemiKeyword()); 
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSemi"


    // $ANTLR start "entryRuleExclusiva"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:918:1: entryRuleExclusiva returns [String current=null] : iv_ruleExclusiva= ruleExclusiva EOF ;
    public final String entryRuleExclusiva() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleExclusiva = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:919:2: (iv_ruleExclusiva= ruleExclusiva EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:920:2: iv_ruleExclusiva= ruleExclusiva EOF
            {
             newCompositeNode(grammarAccess.getExclusivaRule()); 
            pushFollow(FOLLOW_ruleExclusiva_in_entryRuleExclusiva2034);
            iv_ruleExclusiva=ruleExclusiva();

            state._fsp--;

             current =iv_ruleExclusiva.getText(); 
            match(input,EOF,FOLLOW_EOF_in_entryRuleExclusiva2045); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExclusiva"


    // $ANTLR start "ruleExclusiva"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:927:1: ruleExclusiva returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'exclusiva' ;
    public final AntlrDatatypeRuleToken ruleExclusiva() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:930:28: (kw= 'exclusiva' )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:932:2: kw= 'exclusiva'
            {
            kw=(Token)match(input,36,FOLLOW_36_in_ruleExclusiva2082); 

                    current.merge(kw);
                    newLeafNode(kw, grammarAccess.getExclusivaAccess().getExclusivaKeyword()); 
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExclusiva"


    // $ANTLR start "entryRuleAsignacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:945:1: entryRuleAsignacion returns [EObject current=null] : iv_ruleAsignacion= ruleAsignacion EOF ;
    public final EObject entryRuleAsignacion() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAsignacion = null;


        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:946:2: (iv_ruleAsignacion= ruleAsignacion EOF )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:947:2: iv_ruleAsignacion= ruleAsignacion EOF
            {
             newCompositeNode(grammarAccess.getAsignacionRule()); 
            pushFollow(FOLLOW_ruleAsignacion_in_entryRuleAsignacion2121);
            iv_ruleAsignacion=ruleAsignacion();

            state._fsp--;

             current =iv_ruleAsignacion; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAsignacion2131); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAsignacion"


    // $ANTLR start "ruleAsignacion"
    // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:954:1: ruleAsignacion returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'dicta' ( (otherlv_2= RULE_ID ) ) ) ;
    public final EObject ruleAsignacion() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:957:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'dicta' ( (otherlv_2= RULE_ID ) ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:958:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'dicta' ( (otherlv_2= RULE_ID ) ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:958:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= 'dicta' ( (otherlv_2= RULE_ID ) ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:958:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= 'dicta' ( (otherlv_2= RULE_ID ) )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:958:2: ( (otherlv_0= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:959:1: (otherlv_0= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:959:1: (otherlv_0= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:960:3: otherlv_0= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getAsignacionRule());
            	        }
                    
            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAsignacion2176); 

            		newLeafNode(otherlv_0, grammarAccess.getAsignacionAccess().getDocenteDocenteCrossReference_0_0()); 
            	

            }


            }

            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleAsignacion2188); 

                	newLeafNode(otherlv_1, grammarAccess.getAsignacionAccess().getDictaKeyword_1());
                
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:975:1: ( (otherlv_2= RULE_ID ) )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:976:1: (otherlv_2= RULE_ID )
            {
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:976:1: (otherlv_2= RULE_ID )
            // ../tpi.obj3.planificador/src-gen/tpi/obj3/planificador/parser/antlr/internal/InternalPlanificador.g:977:3: otherlv_2= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getAsignacionRule());
            	        }
                    
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAsignacion2208); 

            		newLeafNode(otherlv_2, grammarAccess.getAsignacionAccess().getMateriaMateriaCrossReference_2_0()); 
            	

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAsignacion"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleModelo_in_entryRuleModelo75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModelo85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleElemento_in_ruleModelo130 = new BitSet(new long[]{0x00000000F1000822L});
    public static final BitSet FOLLOW_ruleElemento_in_entryRuleElemento166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleElemento176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlanificacion_in_ruleElemento223 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMateria_in_ruleElemento250 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRecurso_in_ruleElemento277 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDocente_in_ruleElemento304 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClase_in_ruleElemento331 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAula_in_ruleElemento358 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAsignacion_in_ruleElemento385 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePlanificacion_in_entryRulePlanificacion420 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePlanificacion430 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_rulePlanificacion467 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_rulePlanificacion484 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_rulePlanificacion501 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_rulePlanificacion518 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_rulePlanificacion535 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_rulePlanificacion547 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePlanificacion567 = new BitSet(new long[]{0x0000000000008020L});
    public static final BitSet FOLLOW_15_in_rulePlanificacion580 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_rulePlanificacion592 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_16_in_rulePlanificacion604 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion625 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion638 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_18_in_rulePlanificacion650 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion671 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion684 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_rulePlanificacion696 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion717 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion730 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_20_in_rulePlanificacion742 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion763 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion776 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_21_in_rulePlanificacion788 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion809 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion822 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_22_in_rulePlanificacion834 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_ruleClase_in_rulePlanificacion855 = new BitSet(new long[]{0x0000000080020000L});
    public static final BitSet FOLLOW_17_in_rulePlanificacion868 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_rulePlanificacion880 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_23_in_rulePlanificacion892 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMateria_in_entryRuleMateria928 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMateria938 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleMateria975 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMateria992 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleMateria1009 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_25_in_ruleMateria1021 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleMateria1038 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_26_in_ruleMateria1055 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleMateria1072 = new BitSet(new long[]{0x0000000008800000L});
    public static final BitSet FOLLOW_27_in_ruleMateria1090 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMateria1110 = new BitSet(new long[]{0x0000000008800000L});
    public static final BitSet FOLLOW_23_in_ruleMateria1124 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDocente_in_entryRuleDocente1160 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDocente1170 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleDocente1207 = new BitSet(new long[]{0x0000001C00000000L});
    public static final BitSet FOLLOW_ruleDedicacion_in_ruleDocente1228 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDocente1245 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRecurso_in_entryRuleRecurso1286 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRecurso1296 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleRecurso1333 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRecurso1350 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAula_in_entryRuleAula1391 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAula1401 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_ruleAula1438 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAula1455 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClase_in_entryRuleClase1496 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleClase1506 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_31_in_ruleClase1543 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleClase1560 = new BitSet(new long[]{0x0000000100000000L});
    public static final BitSet FOLLOW_32_in_ruleClase1577 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleClase1594 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleClase1619 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_33_in_ruleClase1631 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleClase1651 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDedicacion_in_entryRuleDedicacion1688 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDedicacion1699 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSimple_in_ruleDedicacion1746 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSemi_in_ruleDedicacion1779 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExclusiva_in_ruleDedicacion1812 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSimple_in_entryRuleSimple1858 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSimple1869 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_ruleSimple1906 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSemi_in_entryRuleSemi1946 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSemi1957 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleSemi1994 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExclusiva_in_entryRuleExclusiva2034 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExclusiva2045 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleExclusiva2082 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAsignacion_in_entryRuleAsignacion2121 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAsignacion2131 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAsignacion2176 = new BitSet(new long[]{0x0000002000000000L});
    public static final BitSet FOLLOW_37_in_ruleAsignacion2188 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAsignacion2208 = new BitSet(new long[]{0x0000000000000002L});

}